package cn.biplam.front.html;

import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Wrap_Mode;

/**
 * html 多行文本输入对象
 * @author XiaoRuxing 2009-5-5上午09:41:50
 * @version 1.0
 */
public class HtmlTextArea extends HtmlWindow{

	/** 对象宽度 */
	private int cols=20;
	/** 对象行数 */
	private int rows=2;
	/** 文本内容 */
	private String value;
	private String name;
	/**
	 * 构造函数，传入ID构造
	 * @param ID  对象ID
	 */
	public HtmlTextArea(String ID){
		super(ID);
	}

	/**
	 * 构造指定css的文本输入对象
	 * @param ID    对象ID
	 * @param cssID css样式
	 */
	public HtmlTextArea(String ID,String cssID){
		super(ID,cssID);
	}

	/**
	 * 构造指定css和名称的文本输入对象
	 * @param ID　　　对象ID
	 * @param cssID  css样式
	 * @param sName  对象名称
	 */
	public HtmlTextArea(String ID,String cssID,String sName){
		super(ID,cssID);
		this.name=sName;
	}

	/**
	 * 构造指定css、名称和内容的文本输入对象
	 * @param ID    对象ID
	 * @param cssID css样式
	 * @param sName 对象名称
	 * @param text  对象内容
	 */
	public HtmlTextArea(String ID,String cssID,String sName,String text){
		super(ID,cssID);
		this.name=sName;
		_setValue(text);
	}
	
	/**
	 * 设置输入框值,处理单引号
	 * @param value
	 */
	private void _setValue(String value){
		if(value!=null){
			this.value = value.replace("<p>","\n");
			this.value = value.replace("<br>","\n");
		}
	}

	/**
	 * 设置宽度
	 * @param cols 宽度，以英文字符数为单位
	 * @throws ErrorMessage 
	 */
	public void setCols(int cols) throws ErrorMessage{
		super.setProperty("cols", TOOLS.intToString(cols));
		this.cols=cols;
	}

	/**
	 * 获取宽度
	 * @return 返回对象宽度
	 */
	public int getCols(){
		return this.cols;
	}

	/**
	 * 设置行数
	 * @param rows 对象行数
	 * @throws ErrorMessage 
	 */
	public void setRows(int rows) throws ErrorMessage{
		super.setProperty("rows", TOOLS.intToString(rows));
		this.rows=rows;
	}

	/**
	 * 获取行数
	 * @return 返回对象行数
	 */
	public int getRows(){
		return this.rows;
	}

	/**
	 * 定义输入内容大于文本域时显示的方式 
	 * @param wrap 显示方式
	 * @throws ErrorMessage 
	 */
	public void setWrap(Wrap_Mode wrap) throws ErrorMessage{
		super.setProperty("wrap", wrap.toString());
	}

	/**
	 * 拷贝对象
	 * @return 对象的克隆对象
	 * @throws ErrorMessage
	 */
	public HtmlWindow copy() throws ErrorMessage {
		HtmlTextArea textArea=new HtmlTextArea(this.getID(),this.getCssID(),name,value);
		textArea.setCols(this.getCols());
		textArea.setRows(this.getRows());
		super._copy(textArea);
		return textArea;
	}

	protected void _getContent(StringBuilder sb) throws ErrorMessage {
		if(this.value!=null){
			sb.append(this.value);
		}
	}

	/**
	 * 获取对象及其内容的 HTML 形式(不包含客户端绑定脚本)
	 * @param sb 传入的写缓冲区
	 * @throws ErrorMessage
	 */
	public void getHtml(StringBuilder sb) throws ErrorMessage {
		sb.append("<TEXTAREA ");
		super.writeTagSetting(sb);
		if(!TOOLS.StringIsEmpty(this.name)){
			sb.append(" name='");
			sb.append(this.name);
			sb.append("'");
		}
		sb.append(">");
		this.getContent(sb);
		sb.append("</TEXTAREA>\n");
	}
}
